{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "db0afeeb",
   "metadata": {},
   "source": [
    "# Exercice | Semi-Supervised Learning"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1a33c3fc",
   "metadata": {},
   "source": [
    "# 🚀️Goals\n",
    "- Learn the implementation of semi-supervised learning\n",
    "- Experiment with different methods\n",
    "- Get an impression on their pros and cons"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8b6ba417",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import necessary libraries\n",
    "from sklearn.datasets import load_digits\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.semi_supervised import LabelSpreading \n",
    "from sklearn.semi_supervised import SelfTrainingClassifier \n",
    "from sklearn.svm import SVC\n",
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5b764271",
   "metadata": {},
   "source": [
    "In this exercice we will use the digits dataset from scikit learn."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "30e3adf2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shape dataset training :  1437  and testing : 360\n",
      "Feature shape :  64\n",
      "Classes in the dataset : [0 1 2 3 4 5 6 7 8 9]\n"
     ]
    }
   ],
   "source": [
    "# Load the digits dataset\n",
    "data = load_digits()\n",
    "\n",
    "# Split the dataset into training and test sets\n",
    "X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=42)\n",
    "\n",
    "print('Shape dataset training : ' ,X_train.shape[0],' and testing :', X_test.shape[0])\n",
    "print('Feature shape : ',X_train.shape[1])\n",
    "print('Classes in the dataset :',np.unique(y_train))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "0dab6564",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Apply standard scaling to the training and test sets\n",
    "scaler = StandardScaler()\n",
    "X_train_scaled = scaler.fit_transform(X_train)\n",
    "X_test_scaled = scaler.transform(X_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c00e5cec",
   "metadata": {},
   "source": [
    "# Semi-supervised Learning (Simple Approach)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "59739e8c",
   "metadata": {},
   "source": [
    "In this exercise, you will implement a vanilla semi-supervised learning. You will train a model on a subset of the labeled data, make predictions on the unlabeled data, and then train a second model on both the labeled and pseudo-labeled data. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d009846",
   "metadata": {},
   "source": [
    "## 1) Train only a small sample of labeled data and perform evaluation on the testing set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "13b2313e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set up the LabelSpreading model\n",
    "lp_model = LabelSpreading()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "e6cd26e1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-4 {color: black;}#sk-container-id-4 pre{padding: 0;}#sk-container-id-4 div.sk-toggleable {background-color: white;}#sk-container-id-4 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-4 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-4 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-4 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-4 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-4 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-4 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-4 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-4 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-4 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-4 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-4 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-4 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-4 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-4 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-4 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-4 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-4 div.sk-item {position: relative;z-index: 1;}#sk-container-id-4 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-4 div.sk-item::before, #sk-container-id-4 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-4 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-4 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-4 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-4 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-4 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-4 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-4 div.sk-label-container {text-align: center;}#sk-container-id-4 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-4 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-4\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LabelSpreading()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-4\" type=\"checkbox\" checked><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">LabelSpreading</label><div class=\"sk-toggleable__content\"><pre>LabelSpreading()</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "LabelSpreading()"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Train a lp_model model on the first 100 labeled samples:\n",
    "\n",
    "'''\n",
    "YOUR CODE HERE\n",
    "'''\n",
    "lp_model.fit(X_train_scaled[:100],y_train[:100])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "8ea62035",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Testing set accuracy: 0.7722222222222223\n"
     ]
    }
   ],
   "source": [
    "# Test the model's accuracy on the testing set\n",
    "test_acc = lp_model.score(X_test_scaled, y_test)\n",
    "print(\"Testing set accuracy:\", test_acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4bb365e3",
   "metadata": {},
   "source": [
    "## 2) Use the model to make prediction on the unlabled samples (not first 100 samples of X_train_scaled) and then retrain a new model with the new 'labels' and evaluate the performances"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "1d14e146",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Make predictions on the unlabeled samples and combine them with the labeled samples:\n",
    "'''\n",
    "YOUR CODE HERE\n",
    "'''\n",
    "y_train_pseudo = lp_model.predict(X_train_scaled[100:])\n",
    "y_train_combined = np.concatenate([y_train[:100], y_train_pseudo])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "39d5b3db",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-5 {color: black;}#sk-container-id-5 pre{padding: 0;}#sk-container-id-5 div.sk-toggleable {background-color: white;}#sk-container-id-5 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-5 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-5 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-5 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-5 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-5 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-5 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-5 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-5 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-5 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-5 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-5 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-5 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-5 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-5 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-5 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-5 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-5 div.sk-item {position: relative;z-index: 1;}#sk-container-id-5 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-5 div.sk-item::before, #sk-container-id-5 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-5 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-5 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-5 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-5 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-5 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-5 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-5 div.sk-label-container {text-align: center;}#sk-container-id-5 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-5 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-5\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LabelSpreading()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-5\" type=\"checkbox\" checked><label for=\"sk-estimator-id-5\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">LabelSpreading</label><div class=\"sk-toggleable__content\"><pre>LabelSpreading()</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "LabelSpreading()"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Retrain the lp_model on the combined set of labeled and pseudo-labeled samples:\n",
    "'''\n",
    "YOUR CODE HERE\n",
    "'''\n",
    "# lp_model = LabelSpreading()\n",
    "lp_model.fit(X_train_scaled, y_train_combined)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "d78c5df7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Testing set accuracy: 0.7972222222222223\n"
     ]
    }
   ],
   "source": [
    "#Evaluate the model's accuracy on the testing set again:\n",
    "test_acc = lp_model.score(X_test_scaled, y_test)\n",
    "print(\"Testing set accuracy:\", test_acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5737b85f",
   "metadata": {},
   "source": [
    "# Semi-supervised Learning with Label Propagation"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "91044696",
   "metadata": {},
   "source": [
    "Label Propagation is a semi-supervised learning algorithm that can be used to predict labels for data points in a dataset where only a small subset of the data has labeled labels. The algorithm assumes that data points that are close together in the feature space are likely to belong to the same class. It works by propagating the labels of labeled data points to nearby unlabeled data points.\n",
    "\n",
    "The algorithm starts by assigning the labeled data points their true labels, and the unlabeled data points arbitrary labels. Then, it iteratively propagates the labels of labeled data points to their neighbors in the feature space, using a Gaussian kernel to weight the influence of each labeled point on its neighbors. After each iteration, the algorithm updates the labels of the unlabeled points based on the labels of their neighbors, and continues until convergence."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "064024ea",
   "metadata": {},
   "source": [
    "Now you will implement the Label Propagation algorithm. We'll need to pass now the unlabled data points directly to the method, however the labels will be set to -1 for those one. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "31d73868",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set up the LabelSpreading model\n",
    "lp_model = LabelSpreading()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "a1bd4ab6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-6 {color: black;}#sk-container-id-6 pre{padding: 0;}#sk-container-id-6 div.sk-toggleable {background-color: white;}#sk-container-id-6 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-6 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-6 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-6 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-6 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-6 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-6 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-6 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-6 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-6 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-6 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-6 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-6 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-6 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-6 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-6 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-6 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-6 div.sk-item {position: relative;z-index: 1;}#sk-container-id-6 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-6 div.sk-item::before, #sk-container-id-6 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-6 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-6 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-6 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-6 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-6 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-6 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-6 div.sk-label-container {text-align: center;}#sk-container-id-6 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-6 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-6\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LabelSpreading()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-6\" type=\"checkbox\" checked><label for=\"sk-estimator-id-6\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">LabelSpreading</label><div class=\"sk-toggleable__content\"><pre>LabelSpreading()</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "LabelSpreading()"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Use the labeled and unlabeled data to fit the model\n",
    "y_labeled = y_train.copy()\n",
    "y_labeled[100:] = -1  # Set labels of the unlabeled data to -1\n",
    "\n",
    "'''\n",
    "YOUR CODE HERE to fit the model \n",
    "'''\n",
    "lp_model.fit(X_train_scaled, y_labeled)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "df92b498",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Label Spreading Testing set accuracy: 0.9\n"
     ]
    }
   ],
   "source": [
    "# Test the model's accuracy on the testing set\n",
    "test_acc = lp_model.score(X_test_scaled, y_test)\n",
    "print(\"Label Spreading Testing set accuracy:\", test_acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c039b407",
   "metadata": {},
   "source": [
    "Compare the results with previous methods (supervised learning on only the first 100 samples and the vanilla semi-supervised method. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "420c5e91",
   "metadata": {},
   "source": [
    "## We can also visualize the performance of the model by plotting a graph of the accuracy on the test set versus the number of labeled data points used to train the model."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ae456fe",
   "metadata": {},
   "source": [
    "Here, we start by training the model on just 10% labeled data points and then gradually increase the number of labeled data points by 10% at a time. For each number of labeled data points, we retrain the semi-supervised and supervised models and evaluate their accuracy on the test set. We then plot a graph of the accuracy on the test set versus the number of labeled data points used to train the model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "c2701ec1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Vary the number of labeled samples from 10% to 90% of the total number of samples\n",
    "percentages = list(range(10, 100, 10))\n",
    "test_accs_semi = []\n",
    "test_accs = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "a887a90c",
   "metadata": {},
   "outputs": [],
   "source": [
    "for percentage in percentages:\n",
    "    # Split the training set into labeled and unlabeled data\n",
    "    X_labeled, X_unlabeled, y_labeled, y_unlabeled = train_test_split(X_train, y_train, train_size=percentage/100, stratify=y_train, random_state=42)\n",
    "    \n",
    "    # Apply standard scaling to the labeled and unlabeled data\n",
    "    X_labeled_scaled = scaler.transform(X_labeled)\n",
    "    X_unlabeled_scaled = scaler.transform(X_unlabeled)\n",
    "\n",
    "    # Use the labeled and unlabeled data to fit the model\n",
    "    \n",
    "    '''\n",
    "    YOUR CODE HERE\n",
    "    '''\n",
    "    lp_model = LabelSpreading()\n",
    "    X_scaled = np.concatenate([X_labeled_scaled, X_unlabeled_scaled])\n",
    "    y_combined = np.concatenate([y_labeled, y_unlabeled])\n",
    "    \n",
    "    num_label = X_labeled_scaled.shape[0]\n",
    "    y_combined[num_label:] = -1\n",
    "    lp_model.fit(X_scaled, y_combined)\n",
    "    \n",
    "    # Test the model's accuracy on the testing set\n",
    "    test_acc = lp_model.score(X_test_scaled, y_test)\n",
    "    test_accs_semi.append(test_acc)\n",
    "    \n",
    "    #Compare semi-supervised learning to supervised learning\n",
    "    lp_model = LabelSpreading()\n",
    "    lp_model.fit(X_labeled_scaled, y_labeled)\n",
    "\n",
    "    # Test the model's accuracy on the testing set\n",
    "    test_acc = lp_model.score(X_test_scaled, y_test)\n",
    "    test_accs.append(test_acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "ab17209a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot the accuracy on the test set for each percentage of labeled samples\n",
    "plt.plot(percentages, test_accs,label='Supervised learning')\n",
    "plt.plot(percentages, test_accs_semi,label='Label Propagation')\n",
    "plt.title(\"Label Spreading Accuracy on Test Set vs Percentage of Labeled Samples\")\n",
    "plt.xlabel(\"Percentage of Labeled Samples\")\n",
    "plt.ylabel(\"Accuracy on Test Set\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d7af9681",
   "metadata": {},
   "source": [
    "# Semi-supervised Learning with Self Training"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2c8602ef",
   "metadata": {},
   "source": [
    "Self Training is another semi-supervised learning algorithm that utilizes a classifier to label the unlabeled data. The basic idea behind this algorithm is that it trains a classifier on the labeled data and then uses this classifier to predict labels for the unlabeled data. These predicted labels are then used to expand the labeled dataset, and the process is repeated iteratively.\n",
    "\n",
    "The steps involved in using Self Training are:\n",
    "\n",
    "1) Initialize the classifier and fit it on the labeled data.\n",
    "2) Predict labels for the unlabeled data using the trained classifier.\n",
    "3) Add the predicted labels to the labeled data and retrain the classifier.\n",
    "4) Repeat steps 2 and 3 until convergence or until a maximum number of iterations is reached."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fdbfc282",
   "metadata": {},
   "source": [
    "Fit an SVM classifier on the first 100 labeled samples using the vanilla supervised approach and calculate the test accuracy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "58b2370d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-7 {color: black;}#sk-container-id-7 pre{padding: 0;}#sk-container-id-7 div.sk-toggleable {background-color: white;}#sk-container-id-7 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-7 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-7 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-7 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-7 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-7 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-7 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-7 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-7 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-7 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-7 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-7 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-7 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-7 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-7 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-7 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-7 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-7 div.sk-item {position: relative;z-index: 1;}#sk-container-id-7 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-7 div.sk-item::before, #sk-container-id-7 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-7 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-7 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-7 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-7 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-7 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-7 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-7 div.sk-label-container {text-align: center;}#sk-container-id-7 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-7 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-7\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>SVC(probability=True)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-7\" type=\"checkbox\" checked><label for=\"sk-estimator-id-7\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">SVC</label><div class=\"sk-toggleable__content\"><pre>SVC(probability=True)</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "SVC(probability=True)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Set up an SVM classifier \n",
    "lp_model = SVC(probability=True)\n",
    "\n",
    "'''\n",
    "YOUR CODE HERE\n",
    "'''\n",
    "lp_model.fit(X_train_scaled[:100], y_train[:100])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "57fae2bc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Testing set accuracy: 0.9\n"
     ]
    }
   ],
   "source": [
    "# Test the model's accuracy on the testing set\n",
    "test_acc = lp_model.score(X_test_scaled, y_test)\n",
    "print(\"Testing set accuracy:\", test_acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "82e8aff0",
   "metadata": {},
   "source": [
    "Fit a SelfTrainingClassifier on the entire labeled dataset with the same SVM classifier and calculate the test accuracy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "6556b3aa",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Use the labeled data to fit the model\n",
    "y_labeled = y_train.copy()\n",
    "y_labeled[100:] = -1  # Set labels of the unlabeled data to -1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "edf5af56",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-8 {color: black;}#sk-container-id-8 pre{padding: 0;}#sk-container-id-8 div.sk-toggleable {background-color: white;}#sk-container-id-8 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-8 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-8 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-8 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-8 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-8 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-8 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-8 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-8 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-8 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-8 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-8 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-8 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-8 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-8 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-8 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-8 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-8 div.sk-item {position: relative;z-index: 1;}#sk-container-id-8 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-8 div.sk-item::before, #sk-container-id-8 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-8 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-8 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-8 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-8 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-8 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-8 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-8 div.sk-label-container {text-align: center;}#sk-container-id-8 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-8 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-8\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>SelfTrainingClassifier(base_estimator=SVC(probability=True))</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-8\" type=\"checkbox\" ><label for=\"sk-estimator-id-8\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">SelfTrainingClassifier</label><div class=\"sk-toggleable__content\"><pre>SelfTrainingClassifier(base_estimator=SVC(probability=True))</pre></div></div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-9\" type=\"checkbox\" ><label for=\"sk-estimator-id-9\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">base_estimator: SVC</label><div class=\"sk-toggleable__content\"><pre>SVC(probability=True)</pre></div></div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-10\" type=\"checkbox\" ><label for=\"sk-estimator-id-10\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">SVC</label><div class=\"sk-toggleable__content\"><pre>SVC(probability=True)</pre></div></div></div></div></div></div></div></div></div></div>"
      ],
      "text/plain": [
       "SelfTrainingClassifier(base_estimator=SVC(probability=True))"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "'''\n",
    "YOUR CODE HERE\n",
    "'''\n",
    "self_training_model = SelfTrainingClassifier(lp_model)\n",
    "self_training_model.fit(X_train_scaled, y_labeled)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "3b51c113",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Self Training Testing set accuracy: 0.9305555555555556\n"
     ]
    }
   ],
   "source": [
    "# Test the model's accuracy on the testing set\n",
    "test_acc = self_training_model.score(X_test_scaled, y_test)\n",
    "print(\"Self Training Testing set accuracy:\", test_acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "061bc076",
   "metadata": {},
   "source": [
    "## We can also visualize the performance of the model by plotting a graph of the accuracy on the test set versus the number of labeled data points used to train the model."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86ae4edb",
   "metadata": {},
   "source": [
    "Similar to above, but with SelfTrainingClassifier "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "7de6cf21",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Vary the number of labeled samples from 10% to 90% of the total number of samples\n",
    "percentages = list(range(10, 100, 10))\n",
    "test_accs_semi = []\n",
    "test_accs = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "3d662bd2",
   "metadata": {},
   "outputs": [],
   "source": [
    "for percentage in percentages:\n",
    "    # Split the training set into labeled and unlabeled data\n",
    "    X_labeled, X_unlabeled, y_labeled, y_unlabeled = train_test_split(X_train, y_train, train_size=percentage/100, stratify=y_train, random_state=42)\n",
    "    \n",
    "    # Apply standard scaling to the labeled and unlabeled data\n",
    "    X_labeled_scaled = scaler.transform(X_labeled)\n",
    "    X_unlabeled_scaled = scaler.transform(X_unlabeled)\n",
    "    \n",
    "    '''\n",
    "    YOUR CODE HERE\n",
    "    '''\n",
    "    lp_model = SVC(probability=True)\n",
    "    lp_model.fit(X_labeled_scaled, y_labeled)\n",
    "    \n",
    "    # define the self_training_model\n",
    "    self_training_model = SelfTrainingClassifier(lp_model)\n",
    "    num_label = X_labeled.shape[0]\n",
    "    X_train_self = np.concatenate([X_labeled_scaled, X_unlabeled_scaled])\n",
    "    y_combined = np.concatenate([y_labeled, y_unlabeled])\n",
    "    y_combined[num_label:] = -1\n",
    "    self_training_model.fit(X_train_self, y_combined)\n",
    "    \n",
    "    \n",
    "    \n",
    "    # Test the model's accuracy on the testing set\n",
    "    test_acc = self_training_model.score(X_test_scaled, y_test)\n",
    "    test_accs_semi.append(test_acc)\n",
    "    \n",
    "    lp_model.fit(X_labeled_scaled, y_labeled)\n",
    "\n",
    "    # Test the model's accuracy on the testing set\n",
    "    test_acc = lp_model.score(X_test_scaled, y_test)\n",
    "    test_accs.append(test_acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "42a70d2d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot the accuracy on the test set for each percentage of labeled samples\n",
    "plt.plot(percentages, test_accs,label='Supervised learning')\n",
    "plt.plot(percentages, test_accs_semi,label='Self Training')\n",
    "plt.title(\"Self Training Accuracy on Test Set vs Percentage of Labeled Samples\")\n",
    "plt.xlabel(\"Percentage of Labeled Samples\")\n",
    "plt.ylabel(\"Accuracy on Test Set\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "87296165",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
